<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of authenticationEVoucherClass
 *
 * @author USUARIO
 */
class authenticationEVoucherClass {

    /*Este metodo autntetica al usuario para poder ingresar al modulo de Vales Electronicos
     * -Al interior del metodo vemos como consumimos un ServicioWeb que nos proporciono el 
        cliente(Redcol) la documentacion de los parametros que tenemos que enviar y los datos 
     *  que resivimos estan documentados en un word(ruta-> pendiente ) 
     */
    public function logInEVoucher($paramArray)
    {
        $arrayRespuesta = array("success"=>false,"message"=>"Usuario y/o contraseña no valido");
        try
        {
              $headers = array('Content-Type: application/octet-stream','Content-length: 10000000');
              
              /* 1. Primero vamos a obtener la url que esta en el archivo de configuracion*/
              $urlSinParametros = sfConfig::get('app_log_in_evoucher');
              /* 2. Segundo vamos a armar la url concatenando los parametros de user y password */
              $urlLogIn      = $urlSinParametros.$paramArray['user']."/".$paramArray['password'];
              /* 3. Tercero consumimos el servicio web y crea un nuevo recurso cUrL */
              $handle   = curl_init();
                // 3.1 Dirección URL a capturar. Este valor también puede ser configurado cuando se inicia una sesión con curl_init().
              curl_setopt($handle, CURLOPT_URL,$urlLogIn);
              curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
                 //  3.2 TRUE para incluir el header en el output.
              curl_setopt($handle, CURLOPT_HEADER, TRUE);
                 // 3.4 TRUE para devolver el resultado de la transferencia como string del valor de curl_exec()
                //  en lugar de mostrarlo directamente.
              curl_setopt($handle, CURLOPT_RETURNTRANSFER, true );

              curl_setopt($handle, CURLOPT_POST,true);
              // 3.5 Capturar la URL y pasarla al navegador
              $response = curl_exec($handle);

              

              /*aca es la primera parte del parseo de la data que me devuelve el servicioWeb*/
              $curlHeaderSize   = curl_getinfo($handle,CURLINFO_HEADER_SIZE);
              $ResponseData     = mb_substr($response, $curlHeaderSize);
              $ResponseHeader   = mb_substr($response, 0, $curlHeaderSize);          
              /*Las siguientes 3 lineas son para parcear la informacion y obetner el codigo 
               * de erroren solo en el caso que el usuario y contraseña sea correcta */
            /*  $matches1 = array();
              preg_match('#HTTP/\d+\.\d+ (\d+)#', $ResponseHeader, $matches1);
              $respuestaError1 = $matches1[1];*/


                  $palabra=preg_quote('401');
                  if(eregi("[ tnr]+".$palabra."[ tnr]+",$ResponseHeader)) { 
                     $respuestaError=401;
                  } else { 
                     $respuestaError=200;
                  }  

      
         
              if($respuestaError==401 || $respuestaError==404 || $respuestaError==405 )
              {
                  $arrayRespuesta['message'] = "Error 401, usuario no valido";
              }
              /* usuario valido->crearemos las sessiones correspondientes a nivel 
               * de nuestra aplicacion  */               
              else
              {
                  preg_match_all('|Set-Cookie: (.*);|U', $ResponseHeader, $content);   
                  $responseCookie = implode(';', $content[1]);
                  $jsonResponse = mb_substr($response,$curlHeaderSize,strlen($response)-1);
             
                     $this->logIn($responseCookie, $jsonResponse);
                  
                                 
              }
             
              curl_close($handle);
        }
        catch (Exception $e)
        {
              $arrayRespuesta['message'] = $e->getMessage();
              curl_close($handle);
        }
        
    }
    
    
    private function logIn($cookieParametro,$jsonResponse)
    {
        
        $arrayDecode    = json_decode($jsonResponse);       
        $usuarioSession = new usuarioSession();         
        $usuarioSession->setJsessionId($cookieParametro); 
        $usuarioSession->setClientId($arrayDecode->{'clientId'});        
        $usuarioSession->setLogin($arrayDecode->{'login'});             
        $usuarioSession->setCostDecimalCount($arrayDecode->{'costDecimalCount'}); 
        $usuarioSession->setAmountDecimalCount($arrayDecode->{'amountDecimalCount'});
        $usuarioSession->setCardHolderIdForSql($arrayDecode->{'cardHolderIdForSql'});
        $usuarioSession->setAllowcreatedr($arrayDecode->{'allowcreatedr'});  
        $usuarioSession->setAllowCreateDD($arrayDecode->{'allowCreateDD'});  
        $usuarioSession->setAllowLostCard($arrayDecode->{'allowLostCard'});   
        $usuarioSession->setCardHolderId($arrayDecode->{'cardHolderId'});   
        $usuarioSession->setLnr($arrayDecode->{'lnr'});            
        $usuarioSession->setEmail($arrayDecode->{'email'});         
        $usuarioSession->setAccessType($arrayDecode->{'accessType'});      
        $usuarioSession->setLastUpdate($arrayDecode->{'lastUpdate'});      
        $usuarioSession->setTime_credit_allow($arrayDecode->{'time_credit_allow'}); 
        $usuarioSession->setAllowcreateoil($arrayDecode->{'allowcreateoil'});    
        $usuarioSession->setClientType($arrayDecode->{'clientType'});   
        $usuarioSession->setAllowChangeHolder($arrayDecode->{'allowChangeHolder'});  
        $usuarioSession->setPriceDecimalCount($arrayDecode->{'priceDecimalCount'}); 
        $usuarioSession->setName($arrayDecode->{'name'});             
        $usuarioSession->setId($arrayDecode->{'id'});             
        $usuarioSession->setState($arrayDecode->{'state'});  
        
        /* Creao la session y envio el objeto usuario encapsulado*/
        // sfContext::getInstance()->getUser()->getAttributeHolder()->remove('current_user');        
        sfContext::getInstance()->getUser()->setAttribute(sfConfig::get('app_name_session'), $usuarioSession);
        
    }
    public function logOut()
    {
         sfContext::getInstance()->getUser()->getAttributeHolder()->remove(sfConfig::get('app_name_session'));        
    }
    
     
    
}

?>
